package com.sicheng.datastruct.tree.基础图论.拓扑序列;

import java.util.ArrayDeque;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/5/12 15:00
 */
public class 拓扑排序 {
    /**
     * 给定一个 n 个点 m 条边的有向图，点的编号是 1 到 n，图中可能存在重边和自环。
     * <p>
     * 请输出任意一个该有向图的拓扑序列，如果拓扑序列不存在，则输出 −1。
     * <p>
     * 若一个由图中所有点构成的序列 A 满足：对于图中的每条边 (x,y)，
     * x 在 A 中都出现在 y 之前，则称 A 是该图的一个拓扑序列。
     * <p>
     * 输入格式
     * 第一行包含两个整数 n 和 m。
     * <p>
     * 接下来 m 行，每行包含两个整数 x 和 y，表示存在一条从点 x 到点 y 的有向边 (x,y)。
     * <p>
     * 输出格式
     * 共一行，如果存在拓扑序列，则输出任意一个合法的拓扑序列即可。
     * <p>
     * 否则输出 −1。
     * <p>
     * 数据范围
     * 1≤n,m≤105
     * 输入样例：
     * 3 3
     * 1 2
     * 2 3
     * 1 3
     * 输出样例：
     * 1 2 3
     */

    static int[] st;
    static boolean[] out;
    static boolean[][] g;
    static boolean exist;
    static int[] res;


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        st = new int[n + 1];
        res = new int[n + 1];
        g = new boolean[n + 1][n + 1];
        out = new boolean[n + 1];
        int count = 1;
        for (int i = 0; i < m; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            g[x][y] = true;
            st[y]++;
        }
        ArrayDeque<Integer> deque = new ArrayDeque<>();
        for (int i = 1; i <= n; i++) {
            if (st[i] == 0)
                deque.offer(i);
        }

        while (!deque.isEmpty()) {
            int head = deque.poll();
            out[head] = true;
            res[count++] = head;
            for (int i = 1; i <= n; i++) {
                if (!out[i] && g[head][i]) {
                    st[i]--;
                    g[head][i] = false;
                    if (st[i] == 0) {
                        deque.offer(i);
                        exist = true;
                    }
                }
            }
        }

        if (count <= n)
            System.out.println("-1");
        else {
            for (int i = 1; i <= n; i++) {
                System.out.print(res[i] + " ");
            }
        }


    }
}
